package com.earthchen.core.support.redis.service;


import com.earthchen.core.support.redis.key.KeyPrefix;

/**
 * redis服务接口
 *
 * @author earthchen
 * @date 2018/8/8
 **/
public interface RedisService {


    /**
     * 获取单个对象
     *
     * @param prefix
     * @param key
     * @param clazz
     * @param <T>
     * @return
     */
    <T> T get(KeyPrefix prefix, String key, Class<T> clazz);

    /**
     * 设置对象
     *
     * @param prefix
     * @param key
     * @param value
     * @param <T>
     * @return
     */
    <T> boolean set(KeyPrefix prefix, String key, T value);

    /**
     * 判断key是否存在
     *
     * @param prefix
     * @param key
     * @param <T>
     * @return
     */
    <T> boolean exists(KeyPrefix prefix, String key);


    /**
     * 删除指定键
     *
     * @param prefix
     * @param key
     */
    void delete(KeyPrefix prefix, String key);


    /**
     * 增加1
     *
     * @param prefix
     * @param key
     * @param <T>
     * @return
     */
    <T> Long incr(KeyPrefix prefix, String key);

    /**
     * 增加n
     *
     * @param prefix
     * @param key
     * @param n
     * @param <T>
     * @return
     */
    <T> Long incr(KeyPrefix prefix, String key, long n);

    /**
     * 减少n
     *
     * @param prefix
     * @param key
     * @param <T>
     * @return
     */
    <T> Long decr(KeyPrefix prefix, String key, long n);

    /**
     * 减少n
     *
     * @param prefix
     * @param key
     * @param <T>
     * @return
     */
    <T> Long decr(KeyPrefix prefix, String key);
}
